類別的存取權限
- 在預設的情況下,類別中的屬性及方法都會是公開的,但在軟體開發中,完全公開有時是不符合開閉設計模式原則的,為避免遭外界有意或無意地修改,會導致類別內部的工作異常。
- 許可權管理法的相關語法有:
- private: 我們可以用這個語法將屬性與方法定義為私有的,這樣在類別外及子類別中都不能進行存取。
- protected: 有些類別希望只有在類別外無法存取,而內類別及子類別可以存取,可使用protected進行宣告,使宣告的屬性及方法成為受保護的。
唯讀屬性
- 唯讀屬性是指該屬性僅可設定值,但不能夠進行賦值,只可在屬性宣告時、建構函數內部可對屬性賦值。
- TypeScript中,使用readonly來設定屬性為唯讀的。
存取器
- 通常我們對屬性進行存取時,都是直接存值和設定值,而在某些情況下,需要使用設定特定邏輯來對屬性進行存值與設定值時,可使用存取器,例如:在圓形類別中,半徑是不可為負數的。
class Circle {
readonly pi:numeber = 3.14
private _radius:number
constructor(radius:number){
this.radius = radius
}
set radius(radius:number){
console.log("呼叫了setter方法");
if (radius >= 0){
this._radius = radius;
}
}
get radius(): number {
console.log("呼叫了Getter方法")
return this._radius;
}
area(): number{
return this.pi * this.radius * this.radius;
}
}
var c = new Circle(1)
console.log("面積:" + c.area());
- 上面這段程式,raduius就像普通屬性,在實際上呼叫了對應的方法,在方法裡對私有的屬性進行操作。
- 如此一來,即可將類別內部的私有屬性與外部公開屬性進行隔離。
- 只有符合要求的資料才能被賦值至私有屬性,在獲取屬性的值時也可以有邏輯保證一定傳回合法的值。
靜態屬性
目前前面談到的都是實例屬性,只有當別實例話出物件時,才可被建立並包裝至物件內部。
- 當某些屬性是被所有物件共用的時,可以將其宣告成唯讀的靜態屬性。
- TypeScript中使用static來宣告靜態屬性,靜態屬性會被直接定義在「類別」上,而非類別的實例上,存取時,同樣直接透過類別名稱來存取。
抽象類別
- 類別的作用是使物件實例化,但並非所有類別都需要實例化出物件。
- 當類別本身無實例化的意義時,就可以使用TypeScript中的abstract來定義抽象類別。
-
抽象類別不可直接實例化,只可透過繼承自抽象類別的具體類別才能被實例化。
今天的內容到這邊為止,明天會介紹TypeScript中介面的應用!